﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using Entidades.Sistema.Base;
using System.Web;
using Mapping.Sistema.Base;

namespace Modelo.Sistema.Base
{
    public class CatalogoBarrio
    {
        Int32 maxIdBarrio;
        
        public List<Barrio> Col_barrio;

        public CatalogoBarrio()
        {
            List<Barrio> barrios = (List<Barrio>)HttpContext.Current.Cache["Col_barrio"];
            if (barrios == null)
            {
                barrios = MappingBarrio.ConsultarBarrios();
                HttpContext.Current.Cache["Col_barrio"] = barrios;
            }

            Col_barrio = barrios;
        }


        public ReadOnlyCollection<Barrio> ListarBarrio()
        {
            return Col_barrio.AsReadOnly();
        }

        public bool AgregarBarrio(Barrio oBarrio)
        {
            oBarrio.IdBarrio = GetMayor();
            oBarrio.IdBarrio = maxIdBarrio + 1;
            Col_barrio.Add(oBarrio);
            Mapping.Sistema.Base.MappingBarrio.AgregarBarrio(oBarrio);
            HttpContext.Current.Cache["Col_barrio"] = Col_barrio;
            return true;
        }

        public bool EliminarBarrio(Barrio oBarrio)
        {
            Col_barrio.Remove(oBarrio);
            Mapping.Sistema.Base.MappingBarrio.EliminarBarrio(oBarrio);
            HttpContext.Current.Session["Col_barrio"] = Col_barrio;
            return true;
        }
        public void ModificarBarrio(Barrio oBarrio)
        {
            Mapping.Sistema.Base.MappingBarrio.ModificarBarrio(oBarrio);
            Col_barrio.Remove(oBarrio);
            Col_barrio.Add(oBarrio);
            HttpContext.Current.Cache["Col_barrio"] = Col_barrio;
        }
        public Barrio BuscarBarrio(int idBarrio)
        {
            return this.Col_barrio.Find(unid => unid.IdBarrio == idBarrio);
        }
        public bool ValidarExistencia(Barrio oBarrio)
        {
            if (this.Col_barrio.Count(unid => unid.IdBarrio == oBarrio.IdBarrio) == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public List<Barrio> BuscarBarriosPorLocalidad(int idLocalidad)
        {
            return this.Col_barrio.Where(bar => bar.Localidad.IdLocalidad == idLocalidad).ToList();
        }

        public Int32 GetMayor()
        {
            if (Col_barrio.Count == 0) return 0;

                 maxIdBarrio =
                (from pro in Col_barrio
                 select pro.IdBarrio)
                .Max();

            return maxIdBarrio;
        }
    }
}
